package com.longbig.dto;

import com.fasterxml.jackson.databind.JsonNode;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: yyl
 * @date: 2025/4/14:20:44
 */
@Data
public class X6Edge {
    private String id;          // 边唯一标识，对应JSON中的"id"
    private String sourceId;    // 起始节点ID，对应JSON中source.cell
    private String targetId;    // 目标节点ID，对应JSON中target.cell
    private int zIndex;         // 图层层级，对应JSON中的"zIndex"
    private Map<String, Object> attrs; // 扩展属性（如条件表达式）

    public X6Edge() {
    }

    public X6Edge(String id, String sourceId, String targetId) {
        this.id = id;
        this.sourceId = sourceId;
        this.targetId = targetId;
    }

    // 从JSON节点解析（Jackson示例）
    public static X6Edge fromJson(JsonNode edgeNode) {
        String id = edgeNode.get("id").asText();
        String sourceId = edgeNode.at("/source/cell").asText();
        String targetId = edgeNode.at("/target/cell").asText();

        X6Edge edge = new X6Edge(id, sourceId, targetId);

        // 处理可选字段
        if (edgeNode.has("zIndex")) {
            edge.setZIndex(edgeNode.get("zIndex").asInt());
        }
        if (edgeNode.has("attrs")) {
            edge.setAttrs(parseAttrs(edgeNode.get("attrs")));
        }
        return edge;
    }

    // 解析扩展属性（可根据需要扩展）
    private static Map<String, Object> parseAttrs(JsonNode attrsNode) {
        Map<String, Object> attrs = new HashMap<>();
        attrsNode.fields().forEachRemaining(entry -> {
            attrs.put(entry.getKey(), entry.getValue());
        });
        return attrs;
    }



    // 获取条件表达式（Flowable专用）
    public String getConditionExpression() {
        if (attrs != null && attrs.containsKey("condition")) {
            return (String) attrs.get("condition");
        }
        return null;
    }

}
